HTTP 2.0
HTTP 1.0 缺点
在http 1.0 时,每进行一次请求时,都会建立一次TCP连接,开销很大
HTTP 1.1 缺点
HTTP Pipelining(http管线技术)
在http1.1中默认是启用该技术的,即消息头中:Connection:keep-alive.
HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应。这样就像在串行队列中执行任务一样,若前一个任务十分耗时,则会导致后续的响应卡顿.这就是所谓的线头卡顿(Head of line blocking).
请求数量
浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞
数据大小
HTTP1.1的格式为文本格式,难以优化. 大量相似http请求时,会发送大量一样的消息头,导致流量浪费.(跟json 与 protocolBuf)
服务端无法主动推送资源至服务端
HTTP 2.0
数据格式
HTTP 2.0 使用新的二进制格式:基本的协议单位是帧,每个帧都有不同的类型和用途,规范中定义了10种不同的帧。例如,报头(HEADERS)和数据(DATA)帧组成了基本的HTTP 请求和响应;其他帧例如 设置(SETTINGS),窗口更新(WINDOW_UPDATE), 和推送承诺(PUSH_PROMISE)是用来实现HTTP/2的其他功能。那些请求和响应的帧数据通过流来进行数据交换。新的二进制格式是流量控制、优先级、server push等功能的基础.
单一连接,多路复用
http2.0 允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。可以理解为在单一的TCP链接中,并发请求响应.
在TCP链接时,并不是一开始就到达最大传输速度,因为若带宽不足,一开始高速则会导致阻塞.而是随着时间推移逐渐提速,最后达到适合的速度.这叫做TCP的慢启动. 而这对于HTTP这种突发性,短时性的链接会十分低效.
首部压缩
http2.0是用了专门为头部压缩而设计的算法,减少冗余数据的传输.
服务端推送
服务端推送是一种在客户端请求之前发送数据的机制,在HTTP 2.0中,服务端可以对客户端的一个请求发送多个响应.这样可以在客户端下次请求时直接返回推送的缓存.
同类协议
SPDY的特性基本和Http 2.0相同,因为http2.0就是收spdy的启发设计的. 主要不同在于对传输数据使用gzip进行压缩.
iOS端使用
在iOS下,NSURLSession适配了http2.0的,所以我们可以无感的使用他,而不需要做额外的适配,主要是服务器的配置.